//
//  DatePickerViewController.swift
//  iOS-RxSwift-Tutorials_Example
//
//  Created by mengru.tian on 2020/9/21.
//  Copyright © 2020 CocoaPods. All rights reserved.
//

import UIKit
import RxSwift
import RxRelay

class DatePickerViewController: UIViewController {
    
    private let disposeBag = DisposeBag()

    @IBOutlet weak var datePicker: UIDatePicker!
    @IBOutlet weak var label: UILabel!
    
    @IBOutlet weak var datePicker2: UIDatePicker!
    @IBOutlet weak var button: UIButton!
    
    //剩余时间（必须为 60 的整数倍，比如设置为100，值自动变为 60）
    let leftTime = Variable(TimeInterval(180))
     
    //当前倒计时是否结束
    let countDownStopped = Variable(true)
    
    //日期格式化器
    lazy var dateFormatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy年MM月dd日 HH:mm"
        return formatter
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        title = "27.UI控件扩展8：UIDatePicker"
        view.backgroundColor = .white
        
        test()
        test2()
    }
    
    // 当日期选择器里面的时间改变后，将时间格式化显示到 label 中。
    func test() {
        datePicker.rx.date
        .map { [weak self] in
            "当前选择时间: " + self!.dateFormatter.string(from: $0)
        }
        .bind(to: label.rx.text)
        .disposed(by: disposeBag)
    }
    
    // 倒计时功能
    func test2() {
        
//        //剩余时间与datepicker做双向绑定
//        DispatchQueue.main.async{
//
//            _ = self.datePicker2.rx.countDownDuration <-> leftTime
//
//        }
//
//        //绑定button标题
//        Observable.combineLatest(leftTime.asObservable(), countDownStopped.asObservable()) {
//            leftTimeValue, countDownStoppedValue in
//            //根据当前的状态设置按钮的标题
//            if countDownStoppedValue {
//                return "开始"
//            }else{
//                return "倒计时开始，还有 \(Int(leftTimeValue)) 秒..."
//            }
//            }.bind(to: button.rx.title())
//            .disposed(by: disposeBag)
//
//        //绑定button和datepicker状态（在倒计过程中，按钮和时间选择组件不可用）
//        countDownStopped.asDriver().drive(datePicker2.rx.isEnabled).disposed(by: disposeBag)
//        countDownStopped.asDriver().drive(datePicker2.rx.isEnabled).disposed(by: disposeBag)
//
//        //按钮点击响应
//        button.rx.tap
//            .bind { [weak self] in
//                self?.startClicked()
//            }
//            .disposed(by: disposeBag)
    }
    
    //开始倒计时
    func startClicked() {
        //开始倒计时
        self.countDownStopped.value = false
         
        //创建一个计时器
        Observable<Int>.interval(1, scheduler: MainScheduler.instance)
            .takeUntil(countDownStopped.asObservable().filter{ $0 }) //倒计时结束时停止计时器
            .subscribe { event in
                //每次剩余时间减1
                self.leftTime.value -= 1
                // 如果剩余时间小于等于0
                if(self.leftTime.value == 0) {
                    print("倒计时结束！")
                    //结束倒计时
                    self.countDownStopped.value = true
                    //重制时间
                    self.leftTime.value = 180
                }
            }.disposed(by: disposeBag)
    }
}
